/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution11 {
    public ListNode swapPairs(ListNode head) {
        // if (head == null || head.next == null) {
        //     return head;
        // }
        // ListNode newHead = head.next;
        // head.next = swapPairs(newHead.next);
        // newHead.next = head;
        // return newHead;
        // //递归

        if(head==null||head.next==null){
            return head;
        }
        ListNode f1=new ListNode();
        ListNode cur =head;
        ListNode end =cur.next;
        f1.next=end;

        cur.next=end.next;
        end.next=cur;
        ListNode temp =new ListNode();
        temp =cur;
        while(cur.next!=null&&cur.next.next!=null){
            cur=cur.next;
            end =cur.next;
            temp.next=end;
            cur.next=end.next;
            end.next=cur;
            temp=cur;
        }
        return f1.next;
        //迭代(关键点在于需要一个节点来记录一对相邻节点的前一个节点)
    }
}

